#include<stdio.h>
#include<unistd.h>
#include<assert.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/types.h>

int main()
{
    execl("./mybin","mybin",NULL);
    //execl("./mybin","./mybin",NULL); //加不加 ./ 都可以
    return 0;
}



//int main()
//{
//    execlp("ls","ls","-a","-l","--color=auto",NULL);
//    //这里的第一个参数只需要指定替换程序的名称，系统会自动再环境变量PATH中找对应的程序
//    //两个ls并不重复。一个是要执行的程序，一个是怎么执行
//    exit(1);
//    return 0;
//}
//

//int main()
//{
//
////    execle("/usr/bin/ls","ls","-a","-l","--color=suto",NULL,);
//    exit(1);
//    return 0;
//}
//


//int main()
//{
//    char* const argv_[] = {
//        (char* const)"ls", //"ls" 是 const char* 类型的 , 也可以不强转（会报警告），建议强转一下
//        (char* const)"-a",
//        (char* const)"--color=auto",
//        (char* const)"-l",
//        NULL
//    };
//    execvp("ls",argv_ );
//    //这里的第一个参数只需要指定替换程序的名称，系统会自动再环境变量PATH中找对应的程序
//    exit(1);//替换失败
//    return 0;
//}
//






//int main()
//{
//
//    printf("process runing !!!!!!!\n");
//    pid_t id = fork();
//    assert(id>=0);
//    //assert(id != -1);//也可以
//    if(id ==0)
//    {
//        execl("/usr/bin/ls", "ls","-a", "-l","--color=auto",NULL);
//        printf("子进程替换失败退出！！！\n");//如果走到这里就是替换失败了。
//        exit(1);
//    }
//    else{
//        sleep(2);
//        printf("我是父进程！！\n");
//        int status =0;
//        int ret = waitpid(id, &status, 0);//阻塞等待
//        if(ret > 0)
//        {
//            printf("我是父进程，等待成功，子进程pid是：%d,退出码是：%d\n",ret, WEXITSTATUS(status));
//        }
//        if(ret == -1)
//        {
//            printf("我是父进程，等待失败，子进程pid是：%d,终止信号是：%d\n",ret,WTERMSIG(status));
//        }
//    }
//
//    //``````printf("process runing!!!!\n");
//    //``````execl("./mychild_test", "mychild_test" ,NULL);
//    //``````printf("process runing done!!!!!!!!!!!!!\n");
//
//
//   // pid_t id = fork();
//   // if(id == 0)
//   // {
//   //     printf("我是子进程！！！\n");
//   // }
//   // else{
//   //     printf("我是父进程！！！!!!!!!!!!!!!!!!！\n");
//   // }
//
//    return 0;
//}
